// 这个文件是一个仓库，里面存放的内容是与“商品分类”全局组件有关的配置信息
import { defineStore } from "pinia";
import { requestCategory1,requestCategory2,requestCategory3 } from "@/api/product/attr";
import type { typeOfPropertyNamedDataInTheResponseDataOfAllOfTheApisForGetCategory1AndGetCategory2AndGetCategory3 } from "@/api/product/attr"
import type { datatypeForStateOfCategory } from "@/store/modules/types/type"
let useCategoryStore = defineStore("category", {
    // 注：在此处，括号后面的冒号后面的datatypeForStateOfCategory指的是函数的返回值的类型（也就是仓库中state属性的数据类型）↓
    state: (): datatypeForStateOfCategory => {
        return {
            anArrayThatStoreTheDataOfCategory1: [], // 这是用来存储一级分类数据的数组
            anArrayThatStoreTheDataOfCategory2: [], // 这是用来存储二级分类数据的数组
            anArrayThatStoreTheDataOfCategory3: [], // 这是用来存储三级分类数据的数组
            idOfCategory1: "", // 这个数据被用来记录一级分类的id，以便在获取二级分类的请求中用到它
            idOfCategory2: "", // 这个数据被用来记录二级分类的id，以便在获取三级分类的请求中用到它
            idOfCategory3: "", // 这个数据被用来记录三级分类的id，以便在获取商品的请求中用到它
        };
    },
    actions: {
        /**
         * 函数“getTheDataOfCategory1”被用来获取一级分类的数据，并把数据存储到仓库中对应的数组里
         */
        async getTheDataOfCategory1() {
            // console.log("仓库中获取一级分类的数据的函数被调用了")
            // let result:any = await requestCategory1()
            let result: typeOfPropertyNamedDataInTheResponseDataOfAllOfTheApisForGetCategory1AndGetCategory2AndGetCategory3 = await requestCategory1()
            console.log(result) // {code: 200, message: '成功', data: Array(17), ok: true}
            if (result.code == 200) {
                this.anArrayThatStoreTheDataOfCategory1 = result.data
            } else {

            }
        },
        // 何时发送请求获取“二级分类的数据”？第一种做法：监听仓库中的“idOfCategory1”属性的变化，当它发生变化（即“有值”）时，就发送请求获取二级分类的数据；
        // 第二种做法：监听“选择器组件”（即“el-select”组件）提供的“change”事件，当它被触发时（即用户选择了某个一级分类），就发送请求获取二级分类的数据。
        /**
         * 函数“getTheDataOfCategory2”被用来获取二级分类的数据，并把数据存储到仓库中对应的数组里
         */
        async getTheDataOfCategory2() {
            // 发送请求，获取与某个一级分类对应的二级分类的数据↓
            let result:typeOfPropertyNamedDataInTheResponseDataOfAllOfTheApisForGetCategory1AndGetCategory2AndGetCategory3 = await requestCategory2(this.idOfCategory1)
            console.log(result) // {code: 200, message: '成功', data: Array(5), ok: true}
            if (result.code == 200) {
                this.anArrayThatStoreTheDataOfCategory2 = result.data
            } else {

            }
        },
        /**
         * 函数“getTheDataOfCategory3”被用来获取三级分类的数据，并把数据存储到仓库中对应的数组里
         */
        async getTheDataOfCategory3() {
            // 发送请求，获取与某个二级分类对应的三级分类的数据↓
            let result:typeOfPropertyNamedDataInTheResponseDataOfAllOfTheApisForGetCategory1AndGetCategory2AndGetCategory3 = await requestCategory3(this.idOfCategory2)
            console.log(result) // {code: 200, message: '成功', data: Array(16), ok: true}
            if (result.code == 200) {
                this.anArrayThatStoreTheDataOfCategory3 = result.data
            } else {

            }
        },

    },
    getters: {

    },
});
export default useCategoryStore;